Kein Entwickler ist vor Fehlern gefeit. Grössere Projekte benötigen bis zu einem Drittel ihrer Dauer für die Entdeckung und Verbesserung von Fehlern (Testen und Debugging). Man unterscheidet zwei Fehlerkategorien: Syntax- und logische Fehler sowie Übersetzungs- und Laufzeitfehler.
Syntaxfehler verstossen gegen die Formvorschriften einer Programmiersprache. Sie werden meist vom Compiler entdeckt.
Semantikfehler (logische Fehler) verstossen gegen die Spezifikation. Sie werden in der Regel erst zur Laufzeit und nach systematischem Testen entdeckt.
Während die Syntax (Grammatik) die Form einer Programmiersprache beschreibt, regelt die Semantik deren Bedeutung. Die Semantik definiert, wie ein Programmergebnis zustande kommt. Die folgenden Beispiele veranschaulichen den Unterschied zwischen Syntax- und Semantikfehlern:
Die Aussage “Der Rhein fliesst träge” enthält weder syntaktische noch semantische Fehler
“Der Rhein fliesst bunt” ist zwar syntaktisch in Ordnung, semantisch ist sie aber unsinnig
“Der Rhein bunt fliesst” ist sowohl syntaktisch als auch semantisch falsch.
Nach dem Zeitpunkt der Fehlerentdeckung unterscheidet man zwischen Fehlern zur Übersetzungszeit und Fehlern zur Laufzeit:
Übersetzungszeitfehler sind Fehler, die vom Programmeditor bereits früh (engl. at compile time) entdeckt werden. Syntaxfehler gehören in der Regel zu den Übersetzungszeitfehlern
Laufzeitfehler sind Fehler, die erst nach einem Programmaufruf (engl. at run time) zu einer Fehlermeldung führen. Logische Fehler gehören zu den Laufzeitfehlern.
Fehlerarten
Syntax-, Laufzeit- und logische Fehler
Die Fehlermeldungen eines Übersetzers (engl. compiler) sind aus den folgenden Gründen nicht immer leicht verständlich:
Es kommt vor, dass der Übersetzer eine Anweisung als fehlerhaft bezeichnet, obwohl sie den Syntaxregeln nicht widerspricht. In einem solchen Fall ist eine der vorausgehenden Anweisungen fehlerhaft.
Manchmal müssen nicht alle angezeigten Fehler korrigiert werden. Die Korrektur eines einzigen Fehler kann nämlich automatisch auch die Folgefehler eliminieren.
Der Übersetzer bemerkt Fehler oft erst dann, nachdem andere Fehler korrigiert worden sind.
Die folgenden VBA-Fehler sind manchmal schwer auffindbar:
Fehler entstehen oft durch Vereinbarungen, die VBA automatisch falsch vornimmt. Wer Option Explicit an den Anfang eines Moduls setzt, kann solche Fehler meist vermeiden
VBA kann einen Datentyp automatisch in einen falschen konvertieren (zum Beispiel von String nach Integer) und unsinnige Operationen darauf ausführen
Falsch gesetzte oder vergessene Klammern (zum Beispiel in Unterprogrammaufrufen) führen manchmal zu schwer erkennbaren Fehlern.